package com.gjt.event.impl;

import com.gjt.annotation.ClassAnnotation;
import com.gjt.enmuns.AnnotationEventType;
import com.gjt.event.RootEvent;

/**
 * 插入事件
 *
 * @author Guojt
 * @date 2024/10/29 18:00
 */
@ClassAnnotation(value = "InsertEventImpl", id = 1)
public class InsertEventImpl implements RootEvent {
    private String message;

    public InsertEventImpl() {
    }

    public InsertEventImpl(String message) {
        this.message = message;
//        this.onMessage(message.getClass());
    }

//    @Override
//    public <T> void onMessage(T object) {
//        Class<String> objectClass = null;
//        if(String.class.isAssignableFrom(object)){
//             objectClass = castClass(object);
//            try {
//                System.out.println(this.message);
//                String s = objectClass.newInstance();
//                System.out.println("传过来的数据是 ：" + s);
//                System.out.println("执行插入操作");
//            } catch (InstantiationException |IllegalAccessException e) {
//                throw new RuntimeException(e);
//            }
//        }else {
//            System.out.println("类型不匹配，无法转换");
//        }
//
//
////
////        if (object.getName().equalsIgnoreCase("java.lang.String")) {
////            System.out.println(message+ "消息");
////            System.out.println("插入事件的操作！");
////        }
//    }

    public static <T> Class<T> castClass(Class<?> clazz) {
        return (Class<T>) clazz;
    }

    @Override
    public void onMessage(Class object) {
        Class<String> objectClass = null;


        /**
         *  isAssignableFrom： 用于判断一个类是否可以被另一个类或者接口  赋值
         *  使用场景 继承关系：检查一个类是否是另一个类的子类。
         *          实现接口：检查一个类是否实现了某个接口。
         *          相同类型：检查两个类是否是相同的类型。
         */
        if(String.class.isAssignableFrom(object)){
            objectClass = castClass(object);
            try {
                System.out.println(this.message);
                String s = objectClass.newInstance();
                System.out.println("传过来的数据是 ：" + s);
                System.out.println("执行插入操作");
            } catch (InstantiationException |IllegalAccessException e) {
                throw new RuntimeException(e);
            }
        }else {
            System.out.println("类型不匹配，无法转换");
        }
    }
}
